這篇的目的是防止別人直接打開執行檔,要限制只有被那個程式呼叫才能執行
因為有時候會有這種特別的需求
一定要從程式a才能叫出程式b,就是不要給人直接開啟程式b
要達到這種需求,最簡單的方式是在 程式a 加上 接收參數
而在程式b加上 送出 參數,然後啟動程式a
因為以前在vb6有用過這種方式,所以這次遇到這種需求,
我也就想到用這種方式
Visual studio 一次只能有一個方案,一個方案能有很多個專案
這篇範例用了兩個專案檔,要加入第二個專案的方式如下圖
檔案>加入>新增專案
因為程式a要呼叫程式b所以我把ex13_2的輸入路徑改成跟ex13_1的路徑一樣
這樣就能直接在同一個目錄下呼叫了
ex13_1 程式碼
//程式A呼叫程式B
private void button1_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo("ex_13_2.exe");//設定執行檔名稱 ex_13_2.exe
startInfo.UseShellExecute = false;//要加這行才能正常執行
startInfo.Arguments = "givememoney";//傳入參數
Process.Start(startInfo);//啟動 startInfo
}
ex13_2 Program.cs程式碼,參數在這邊接收
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace ex_13_2
{
static class Program
{
/// <summary>
/// 應用程式的主要進入點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//限制需傳參數進來 才啟動
if (args[0].ToString() == "givememoney")
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
MessageBox.Show("程式非法啟動","警告");
Application.Exit();
}
}
}
}
都編譯好之後,直接執行ex13_2.exe會看到如下畫面
如果是從ex13_1.exe去呼叫的,當然就會成功了
全系列文章列表
請問一下thc大大,如何讓B程式執行完回傳值給A,而A又該如何接收和判斷呢? 謝謝
大大你好,網頁404了,可否幫忙再發一次這邊連結
不錯的分享,
另外建議在ex13_2 Program.cs加上
檢視原始檔複製到剪貼簿列印關於
<pre class="c" name="code">
if (args.length > 0 || args[0].ToString() == "givememoney") {
// do smthing.
} else {
// alert & exit.
}
這樣可避免發生windows的錯誤訊息而達到原本預期的效果。:)